package com.springboot.file.provider.impl;

import com.springboot.file.provider.DocumentProvider;
import org.springframework.stereotype.Component;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

/**
 * 合同文档处理器实现
 */
@Component
public class ContractDocumentProvider implements DocumentProvider {
    
    private static final String BUSINESS_TYPE = "CONTRACT";
    
    @Override
    public String getBusinessType() {
        return BUSINESS_TYPE;
    }
    
    @Override
    public Map<String, Object> prepareData(Map<String, Object> parameters) {
        Map<String, Object> data = new HashMap<>();
        
        // 生成合同ID
        String contractId = "C" + System.currentTimeMillis() % 10000 + 
                UUID.randomUUID().toString().substring(0, 4).toUpperCase();
        
        // 添加默认合同数据
        data.put("contractId", contractId);
        data.put("date", LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日")));
        data.put("companyName", "我方公司名称");
        data.put("companyRep", "我方代表");
        data.put("companyContact", "13800138000");
        data.put("customerName", "客户名称");
        data.put("customerRep", "客户代表");
        data.put("customerContact", "13900139000");
        data.put("serviceContent", "提供产品及服务。");
        data.put("startDate", LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE));
        data.put("endDate", LocalDate.now().plusYears(1).format(DateTimeFormatter.ISO_LOCAL_DATE));
        data.put("amount", "¥100,000.00");
        data.put("paymentMethod", "分期付款");
        data.put("providerObligations", "按照双方约定提供产品与服务。");
        data.put("customerObligations", "按时支付费用，提供必要的业务资料，配合完成业务交付。");
        data.put("confidentiality", "双方应对获知的对方商业秘密严格保密，未经对方书面同意，不得向第三方透露。");
        data.put("liability", "任何一方违反本合同约定，应向对方支付合同总金额20%的违约金。");
        data.put("otherTerms", "本合同未尽事宜，双方协商解决。");
        
        // 添加客户自定义的参数
        if (parameters != null && !parameters.isEmpty()) {
            parameters.forEach((key, value) -> {
                if (value != null) {
                    data.put(key, value);
                }
            });
        }
        
        return data;
    }
    
    @Override
    public String getTemplateName(Map<String, Object> parameters) {
        return "contract_template.docx";
    }
    
    @Override
    public String getHeader(Map<String, Object> parameters) {
        return "合同文档";
    }
    
    @Override
    public String getFooter(Map<String, Object> parameters) {
        return "机密文件 - 请注意保密";
    }
    
    @Override
    public String getWatermarkText(Map<String, Object> parameters) {
        // 如果参数中有水印文本，则使用参数中的值
        if (parameters != null && parameters.containsKey("watermarkText")) {
            Object value = parameters.get("watermarkText");
            if (value != null && !value.toString().trim().isEmpty()) {
                return value.toString();
            }
        }
        
        return "合同文件";
    }
    
    @Override
    public String getWatermarkColor(Map<String, Object> parameters) {
        // 如果参数中有水印颜色，则使用参数中的值
        if (parameters != null && parameters.containsKey("watermarkColor")) {
            Object value = parameters.get("watermarkColor");
            if (value != null && !value.toString().trim().isEmpty()) {
                return value.toString();
            }
        }
        
        return "#AAAAAA"; // 默认灰色
    }
    
    @Override
    public boolean showPageNumbers(Map<String, Object> parameters) {
        // 如果参数中有页码显示设置，则使用参数中的值
        if (parameters != null && parameters.containsKey("showPageNumbers")) {
            Object value = parameters.get("showPageNumbers");
            if (value != null) {
                if (value instanceof Boolean) {
                    return (Boolean) value;
                } else if (value instanceof String) {
                    return Boolean.parseBoolean(value.toString());
                }
            }
        }
        
        return true; // 默认显示页码
    }
} 